package com.wjm.list;

import java.util.Deque;
import java.util.LinkedList;

/**
 * Data:2022年07月06日
 * Author:wjm
 * Content: Deque (双端队列)  和 LinkedList实现类
 *
 *  重点是要学List下的LinkedList实现类和ArrayList实现类
 *
 *  LinkedList也是Deque接口的实现类
 *
 *  Deque (双端队列)的说明
 *            一个线性 collection，支持在两端插入和移除元素。名称 deque 是“double ended queue（双端队列）”的缩写，通常读为“deck”。
 *
 *  Deque (双端队列)的常用方法
 *                            第一个元素（头部）                       最后一个元素（尾部）
 *                       抛出异常            特殊值               抛出异常           特殊值
 *                 插入 addFirst(e)      offerFirst(e)         addLast(e)      offerLast(e)
 *                 移除 removeFirst()    pollFirst()           removeLast()    pollLast()
 *                 检查 getFirst()       peekFirst()           getLast()       peekLast()
 *
 *                 Deque(双端队列)尾部元素的插入，移除，检查方法，其实于Queue（队列）的等价，如 addLast(e) 等价于 add(e)
 *                 Deque(双端队列)就比Queue（队列）多了在头部的插入，移除，检查方法
 *
 *  LinkedList实现类
 *                 getFirst()方法 获取第一个元素
 *                 getFirst()方法 获取第一个元素
 *
 */
public class DequeDemo {
    public static void main(String[] args) {
        Deque<Integer> deque = new LinkedList<>();

        deque.add(1);
        deque.addLast(2);
        deque.addLast(3);
        System.out.println(deque);
        //在头部插入9
        deque.offerFirst(9);
        System.out.println(deque);
        //在头部插入10
        deque.addFirst(10);
        System.out.println(deque);

        //getFirst()方法 获取第一个元素
        System.out.println("获取第一个元素"+deque.getFirst());
        //getFirst()方法 获取第一个元素
        System.out.println("获取最后一个元素"+deque.getLast());
    }
}
